from django.test import TestCase

def is_duplication(ls):
    data01 = len(ls)
    data02 = len(list(set(ls)))
    if data01 == data02:
        return [f"一共{data01}条数据,没有重复数据","black"]
    else:
        dumplicate = []
        d = {}
        for i in ls:
            d[i]=ls.count(i)
        print(d)
        for k,v in d.items():
            if v > 1:
                dumplicate.append(k)
        return [f"去重后,一共{data02}条数据,重复数据：{dumplicate}","red"]

def daily_monitor_duplication():
    """
    日报监测重复数据
    return html
    """

    htm02 = ""
    url = base_url+"api/20231205/invest_object/report/get_invest_day_report_v20240118?type=home&uid=296&lob=magic-platform&request_id=172005960260247342271"
    print(url)
    r = requests.get(url=url, headers=get_headers(env="online"))
    print(r.json()["data"])
    for k,v in r.json()["data"].items():
        # print(k,v)
        if type(v) == dict:
            # print(v["name"])

            if v["name"] == "主要市场的配置热度":
                ls01 = [i["asset_name"] for i in v["list"]]
                print(ls01)
                res01 = is_duplication(ls01)
                print(v["name"],res01)
                htm02 += f'<tr style="color:{res01[1]}"><td>{v["name"]}</td><td>{res01[0]}</td></tr>'
            if v["name"] == "热门资讯":
                ls02 = [i["title"] for i in v["list"]]
                print(ls02)
                res02 = is_duplication(ls02)
                print(v["name"]+"标题", res02)
                htm02 += f'<tr style="color:{res02[1]}"><td>{v["name"]+"标题"}</td><td>{res02[0]}</td></tr>'
                ls03 = [i2["asset_name"] for i in v["list"] for i2 in i["sub_list"]]
                print(ls03)
                res04 = is_duplication(ls03)
                print(v["name"]+"内容", res04)
                htm02 += f'<tr style="color:{res04[1]}"><td>{v["name"]+"内容"}</td><td>{res04[0]}</td></tr>'
            if v["name"] == "最新资讯":
                ls04 = [i["asset_name"] for i in v["list"]]
                print(ls04)
                res05 = is_duplication(ls04)
                print(v["name"]+"标题", res05)
                htm02 += f'<tr style="color:{res05[1]}"><td>{v["name"] + "标题"}</td><td>{res05[0]}</td></tr>'
            if v["name"] == "宏观数据":
                ls05 = [i["title"] for i in v["list"]]
                print(ls05)
                res06 = is_duplication(ls05)
                print(v["name"]+"标题", res06)
                htm02 += f'<tr style="color:{res06[1]}"><td>{v["name"] + "标题"}</td><td>{res06[0]}</td></tr>'
                # 宏观数据里面的内容
                # ls06 = [i2["asset_name"] for i in v["list"] for i2 in i["down_data"]]
                # print(ls06)
                # res07 = is_duplication(ls06)
                # print(v["name"] + "利空数据", res07)
                # ls07 = [i2["asset_name"] for i in v["list"] for i2 in i["up_data"]]
                # print(ls07)
                # res08 = is_duplication(ls07)
                # print(v["name"] + "利好数据", res08)
            if v["name"] == "择时信号":
                ls08 = [i["asset_name"] for i in v["list"]]
                print(ls08)
                res09 = is_duplication(ls08)
                print(v["name"], res09)
                htm02 += f'<tr style="color:{res09[1]}"><td>{v["name"] + "标题"}</td><td>{res09[0]}</td></tr>'
            if v["name"] == "资产预警":
                ls09 = [i["asset_name"] for i in v["list"]]
                print(ls09)
                res10 = is_duplication(ls09)
                print(v["name"], res10)
                htm02 += f'<tr style="color:{res10[1]}"><td>{v["name"]}</td><td>{res10[0]}</td></tr>'

    htm01 = '<table border="1px solid" cellspacing="0" cellpadding="0"><thead><tr><th>验证信息</th><th>验证结果</th></tr></thead>'
    # print(htm02)
    # 提取总个数、失败的个数
    re_result = re.findall('(.*?)color:(.*?)">',htm02)
    # print("***",re_result)
    total_num = 0
    red = 0
    for ii in re_result:
        # print(ii[1])
        total_num+=1
        if ii[1] == 'red':
            red += 1
    p = f'<p>共计{total_num}个接口,重复的：<span style="color: red">{red}</span>个</p>'
    htm = p + htm01 + htm02 + "</table>"
    return htm
# print(daily_monitor_duplication())


def is_repeat(ls):
    """ 检测重复项 """
    repeat_val = []
    d = {}
    for i in ls:
        d[str(i)]=ls.count(i)
    # print(d)
    for k,v in d.items():
        if v !=1:
            # print(d[k])
            repeat_val.append(k)
    if repeat_val:
        return f"重复项是：{repeat_val}"

def is_value(ls):
    for i in ls:
        if type(i)!=dict: # 处理舆情

            if len(i) == 0:
                return f"{i}值为空！"
            else:
                return False

        for k,v in i.items():
            # print(k)
            if type(v)==list:
                is_value(v)
            else:
                if not v or v==None or len(str(v))==0:
                    # if k=="summary": # 处理最热资讯
                    #     return "summary值为空！"
                    if v == 0:
                        return False
                    # 处理最新资讯，不监控 title_from 字段
                    if k == "title_from":
                        return False
                    return f"{k}值为空！"
# h5日报接口
def h5_daily_monitor(h5_date=datetime.date.today()):
    htm02 = ""
    number = 1
    # h5_date = datetime.date.today()

    # 大类资产
    url = daily_base_url + f"api/20211123/report/app_report/assets?date={h5_date}"
    print(url)
    r = requests.get(url=url, headers=get_headers(env="online"))
    response = r.json()
    if response["code"] ==0 and response["msg"]=="操作成功":
        print("大类资产已返回数据")
        data = response["data"]
        # 全球大类资产昨日表现
        if len(data["asset_rets"])>0:
            print("全球大类资产昨日表现,数据已返回")
            name_ls = [i["name"] for i in data["asset_rets"]]
            if is_repeat(name_ls):
                print("全球大类资产昨日表现,数据重复,",is_repeat(name_ls))
                htm02 += f'<tr style="color:red"><td>{number}、全球大类资产昨日表现,数据是否重复</td><td>数据重复,{is_repeat(name_ls)}</td></tr>'
                number+=1
            else:
                print("全球大类资产昨日表现,数据未重复")
                htm02 += f'<tr><td>{number}、全球大类资产昨日表现,数据是否重复</td><td>数据未重复</td></tr>'
                number += 1
            if len(data["asset_rets"])==5:
                print("全球大类资产昨日表现,共计5条数据")
                htm02 += f'<tr><td>{number}、全球大类资产昨日表现,数据数量</td><td>共计5条数据</td></tr>'
                number += 1
            else:
                print("全球大类资产昨日表现,共计%s条数据,请及时查看页面展示情况！"%len(data["asset_rets"]))
                htm02 += f'<tr style="color:red"><td>{number}、全球大类资产昨日表现,数据数量</td><td>共计{len(data["asset_rets"])}条数据,请及时查看页面展示情况！</td></tr>'
                number += 1
            # 字段是否有值
            if is_value(data["asset_rets"]):
                print("全球大类资产昨日表现",is_value(data["asset_rets"]))
                htm02 += f'<tr style="color:red"><td>{number}、全球大类资产昨日表现,字段是否有值</td><td>{is_value(data["asset_rets"])}</td></tr>'
                number += 1
            else:
                print("全球大类资产昨日表现,都有value")
                htm02 += f'<tr><td>{number}、全球大类资产昨日表现,字段是否有值</td><td>都有value</td></tr>'
                number += 1
            # 本周操作观点
            if data["advice"]:
                print("本周操作观点,有内容")
                htm02 += f'<tr ><td>{number}、本周操作观点,是否有有内容</td><td>有内容</td></tr>'
                number += 1
            else:
                print("本周操作观点,无内容")
                htm02 += f'<tr style="color:red"><td>{number}、本周操作观点,是否有有内容</td><td>无内容</td></tr>'
                number += 1
            # 主要市场配置推荐度
            asset_name_ls = [i["asset_name"] for i in data["market_hots"]]
            if is_repeat(asset_name_ls):
                print("主要市场配置推荐度,数据重复,", is_repeat(asset_name_ls))
                htm02 += f'<tr style="color:red"><td>{number}、主要市场配置推荐度,是否重复</td><td>{is_repeat(asset_name_ls)}</td></tr>'
                number += 1
            else:
                print("主要市场配置推荐度,数据未重复")
                htm02 += f'<tr ><td>{number}、主要市场配置推荐度,是否重复</td><td>数据未重复</td></tr>'
                number += 1
            # 主要市场配置推荐度, 字段是否有值
            if is_value(data["market_hots"]):
                print("主要市场配置推荐度",is_value(data["market_hots"]))
                htm02 += f'<tr ><td style="color:red">{number}、主要市场配置推荐度,字段是否有值</td><td>{is_value(data["market_hots"])}</td></tr>'
                number += 1
            else:
                print("主要市场配置推荐度,都有value")
                htm02 += f'<tr ><td >{number}、主要市场配置推荐度,字段是否有值</td><td>都有value</td></tr>'
                number += 1
            # 估值分位（近10年）
            index_name_ls = [i["index_name"] for i in data["value_percents"]]
            if is_repeat(index_name_ls):
                print("估值分位（近10年）,数据重复,", is_repeat(index_name_ls))
                htm02 += f'<tr style="color:red"><td >{number}、估值分位（近10年）,数据是否重复</td><td>{is_repeat(index_name_ls)}</td></tr>'
                number += 1
            else:
                print("估值分位（近10年）,数据未重复")
                htm02 += f'<tr ><td >{number}、估值分位（近10年）,数据是否重复</td><td>数据未重复</td></tr>'
                number += 1
            if is_value(data["value_percents"]):
                print("估值分位（近10年）",is_value(data["value_percents"]))
                htm02 += f'<tr style="color:red"><td >{number}、估值分位（近10年）,数据是否有值</td><td>{is_value(data["value_percents"])}</td></tr>'
                number += 1
            else:
                print("估值分位（近10年）,都有value")
                htm02 += f'<tr ><td >{number}、估值分位（近10年）,数据是否有值</td><td>都有value</td></tr>'
                number += 1
        else:
            print("全球大类资产昨日表现,未返回数据")
            htm02 += f'<tr style="color:red"><td >{number}、全球大类资产昨日表现</td><td>未返回数据</td></tr>'
            number += 1
    else:
        print("大类资产未返回数据")
        htm02 += f'<tr style="color:red"><td >{number}、大类资产</td><td>未返回数据</td></tr>'
        number += 1

    # A股市场
    url2 = daily_base_url + f"api/20211123/report/app_report/industries?date={h5_date}"
    print(url2)
    r2 = requests.get(url=url2, headers=get_headers(env="online"))
    r2 = r2.json()
    if r2["code"] == 0 and r2["msg"] == "操作成功":
        print("A股市场已返回数据")
        data2 = r2["data"]
        # 行业-业绩表现排行,数据是否重复
        ls5 = []

        for i2 in data2["industry_rets"]:
            # print(i2["dateTitle"])
            for i3 in i2["list"]:
                for i4 in i3["data"]:
                    ls5.append(i4["industry"])
            if ls5:
                if is_repeat(ls5):
                    print("A股市场,"+str(i2["dateTitle"])+"行业-业绩表现排行,数据重复,", is_repeat(ls5))
                    htm02 += f'<tr style="color:red"><td>{number}、A股市场,{i2["dateTitle"]}行业-业绩表现排行,数据是否重复</td><td>数据重复,{is_repeat(ls5)}</td></tr>'

                else:
                    print("A股市场,"+str(i2["dateTitle"])+"行业-业绩表现排行,数据未重复")
                    htm02 += f'<tr ><td>{number}、A股市场,{i2["dateTitle"]}行业-业绩表现排行,数据是否重复</td><td>数据未重复</td></tr>'

                print("ls5：%s"%ls5)
                number+=1
                ls5.clear()
            else:
                print("A股市场," + str(i2["dateTitle"]) + "行业-业绩表现排行,没有数据")
                htm02 += f'<tr style="color:red"><td>{number}、A股市场,{i2["dateTitle"]}行业-业绩表现排行</td><td>没有数据</td></tr>'

        # 行业-业绩表现排行,是否有值
        if is_value(data2["industry_rets"]):
            print("行业-业绩表现排行",is_value(data2["industry_rets"]))
            htm02 += f'<tr style="color:red"><td>{number}、A股市场,行业-业绩表现排行,字段是否有值</td><td>{is_value(data2["industry_rets"])}</td></tr>'
            number += 1
        else:
            print("行业-业绩表现排行,都有value")
            htm02 += f'<tr ><td>{number}、A股市场,行业-业绩表现排行,字段是否有值</td><td>都有value</td></tr>'
            number += 1
        # 行业-舆情热度排行，是否重复
        ls6 = []
        ls7 = []
        for i in data2["industry_hots"]:
            print(i["category"])
            for i2 in i["data"]:
                if i2["duration"]=="近一日":
                    for i3 in i2["list"]:
                        ls6.append(i3)

                if i2["duration"]=="近一月":
                    for i3 in i2["list"]:
                        ls7.append(i3)

        print("ls6:",ls6)
        print("ls7:",ls7)
        if len(ls6)==10 and len(ls7)==10:
            print("行业-舆情热度排行TOP数量正确")
            htm02 += f'<tr><td>{number}、行业-舆情热度排行TOP</td><td>数量正确</td></tr>'
            number += 1
        else:
            print("行业-舆情热度排行TOP数量不正确！")
            htm02 += f'<tr style="color:red"><td>{number}、行业-舆情热度排行TOP</td><td>数量不正确</td></tr>'
            number += 1
        if is_repeat(ls6):
            print("近一日看多、看空" + "行业-舆情热度排行,数据重复,", is_repeat(ls6))
            htm02 += f'<tr style="color:red"><td>{number}、近一日看多、看空,行业-舆情热度排行,数据是是否重复</td><td>数据重复,{is_repeat(ls6)}</td></tr>'
            number += 1
        else:
            print("近一日看多、看空" + "行业-舆情热度排行,数据未重复")
            htm02 += f'<tr ><td>{number}、近一日看多、看空,行业-舆情热度排行,数据是是否重复</td><td>数据未重复</td></tr>'
            number += 1
        if is_repeat(ls7):
            print("近一月看多、看空" + "行业-舆情热度排行,数据重复,", is_repeat(ls7))
            htm02 += f'<tr style="color:red"><td>{number}、近一月看多、看空,行业-舆情热度排行,数据是是否重复</td><td>数据重复,{is_repeat(ls7)}</td></tr>'
            number += 1
        else:
            print("近一月看多、看空" + "行业-舆情热度排行,数据未重复")
            htm02 += f'<tr ><td>{number}、近一月看多、看空,行业-舆情热度排行,数据是是否重复</td><td>数据未重复</td></tr>'
            number += 1

        # 行业-舆情热度排行，是否有值
        if is_value(ls6):
            print("近一日看多、看空" + "行业-舆情热度排行,数据是否有值,", is_value(ls6))
            htm02 += f'<tr style="color:red"><td>{number}、近一日看多、看空,行业-舆情热度排行,数据是否有值</td><td>{is_value(ls6)}</td></tr>'
            number += 1
        else:
            print("近日月看多、看空" + "行业-舆情热度排行,有数据")
            htm02 += f'<tr ><td>{number}、近一日看多、看空,行业-舆情热度排行,数据是否有值</td><td>有数据</td></tr>'
            number += 1
        if is_value(ls7):
            print("近一月看多、看空" + "行业-舆情热度排行,数据是否有值,", is_value(ls7))
            htm02 += f'<tr style="color:red"><td>{number}、近一月看多、看空,行业-舆情热度排行,数据是否有值</td><td>{is_value(ls7)}</td></tr>'
            number += 1
        else:
            print("近一月看多、看空" + "行业-舆情热度排行,有数据")
            htm02 += f'<tr ><td>{number}、近一月看多、看空,行业-舆情热度排行,数据是否有值</td><td>有数据</td></tr>'
            number += 1

        # A股市场,估值分位（近10年）,买入数据是否重复
        ls8 = []
        for i in data2["buy_signals"]:
            ls8.append(i["asset_name"])
        if ls8:
            if is_repeat(ls8):
                print("A股市场,估值分位（近10年）,买入信号数据重复,",is_repeat(ls8))
                htm02 += f'<tr style="color:red"><td>{number}、A股市场,估值分位（近10年）,买入信号数据是否重复</td><td>买入信号数据重复,{is_repeat(ls8)}</td></tr>'
                number += 1
            else:
                print("A股市场,估值分位（近10年）,买入信号数据未重复")
                htm02 += f'<tr ><td>{number}、A股市场,估值分位（近10年）,买入信号数据是否重复</td><td>买入信号数据未重复</td></tr>'
                number += 1
            print("ls8:",ls8)
            # A股市场,估值分位（近10年）,卖出数据是否有数值
            if is_value(data2["buy_signals"]):
                print("A股市场,估值分位（近10年）",is_value(data2["buy_signals"]))
                htm02 += f'<tr style="color:red"><td>{number}、A股市场,估值分位（近10年）,买入数据是否有数值</td><td>{is_value(data2["buy_signals"])}</td></tr>'
                number += 1
            else:
                print("A股市场,估值分位（近10年）,买入都有value")
                htm02 += f'<tr ><td>{number}、A股市场,估值分位（近10年）,买入数据是否有数值</td><td>买入都有value</td></tr>'
                number += 1
        else:
            htm02 += f'<tr style="color:red"><td>{number}、A股市场,估值分位（近10年）</td><td>没有买入数据</td></tr>'
            number += 1

        # A股市场,估值分位（近10年）,卖出数据是否重复
        ls9 = []
        for i in data2["sell_signals"]:
            ls9.append(i["asset_name"])
        print(f"ls9: {ls9}")
        if ls9:
            if is_repeat(ls9):
                print("A股市场,估值分位（近10年）,卖出信号数据重复,", is_repeat(ls9))
                htm02 += f'<tr style="color:red"><td>{number}、A股市场,估值分位（近10年）,卖出信号是否重复</td><td>{is_repeat(ls9)}</td></tr>'
                number += 1
            else:
                print("A股市场,估值分位（近10年）,卖出信号数据未重复")
                htm02 += f'<tr><td>{number}、A股市场,估值分位（近10年）,卖出信号是否重复</td><td>卖出信号数据未重复</td></tr>'
                number += 1
            print("ls9:",ls9)
            # A股市场,估值分位（近10年）,卖出数据是否有数值
            if is_value(data2["sell_signals"]):
                print("A股市场,估值分位（近10年）",is_value(data2["sell_signals"]))
                htm02 += f'<tr style="color:red" ><td>{number}、A股市场,估值分位（近10年）,卖出信号字段是否有值</td><td>{is_value(data2["sell_signals"])}</td></tr>'
                number += 1
            else:
                print("A股市场,估值分位（近10年）,卖出都有value")
                htm02 += f'<tr><td>{number}、A股市场,估值分位（近10年）,卖出信号字段是否有值</td><td>卖出都有value</td></tr>'
                number += 1
        else:
            htm02 += f'<tr style="color:red"><td>{number}、A股市场,估值分位（近10年）</td><td>没有卖出数据</td></tr>'
            number += 1

    else:
        print("A股市场,未返回数据")
        htm02 += f'<tr style="color:red" ><td>{number}、A股市场</td><td>未返回数据</td></tr>'
        number += 1

    # 魔方真选
    url3 = daily_base_url + f"api/20211123/report/app_report/funds?date={h5_date}"
    print("")
    r3 = requests.get(url=url3, headers=get_headers(env="online"))
    r3 = r3.json()

    ls10 = []
    if r3["code"] == 0 and r3["msg"] == "操作成功" and len(r3["data"])>1:
        print("魔方真选,已返回数据")
        print("魔方真选,共计%s条数据"%len(r3["data"]))
        for i in r3["data"]:
            ls10.append(i["name"])
        print(ls10)
        if is_repeat(ls10):
            print("魔方真选,数据重复,", is_repeat(ls10))
            htm02 += f'<tr style="color:red"><td>{number}、魔方真选,数据是否重复</td><td>数据重复,{is_repeat(ls10)}</td></tr>'
            number += 1
        else:
            print("魔方真选,数据未重复")
            htm02 += f'<tr ><td>{number}、魔方真选,数据是否重复</td><td>数据未重复</td></tr>'
            number += 1
        if is_value(r3["data"]):
            print("魔方真选",is_value(r3["data"]))
            htm02 += f'<tr style="color:red"><td>{number}、魔方真选,是否有值</td><td>{is_value(r3["data"])}</td></tr>'
            number += 1
        else:
            print("魔方真选,都有value")
            htm02 += f'<tr ><td>{number}、魔方真选,是否有值</td><td>都有value</td></tr>'
            number += 1
    else:
        print("魔方真选,未返回数据")
        htm02 += f'<tr style="color:red"><td>{number}、魔方真选</td><td>未返回数据</td></tr>'
        number += 1
    print("ls10:",ls10)
    # 最热资讯
    url4 = daily_base_url + f"api/20211123/report/app_report/news?date={h5_date}"
    r4 = requests.get(url=url4, headers=get_headers(env="online"))
    r4 = r4.json()
    print("**" * 30)
    ls11 = []
    if r4["code"] == 0 and r4["msg"] == "操作成功" and len(r4["data"])>0:
        print("最热资讯,返回数据")
        for i in r4["data"]:
            ls11.append(i["title"])

        print(ls11)
        if is_repeat(ls11):
            print("最热资讯,数据重复,", is_repeat(ls11))
            htm02 += f'<tr style="color:red" ><td>{number}、最热资讯,数据是否重复</td><td>{is_repeat(ls11)}</td></tr>'
            number += 1
        else:
            print("最热资讯,数据未重复")
            htm02 += f'<tr ><td>{number}、最热资讯,数据是否重复</td><td>数据未重复</td></tr>'
            number += 1
        if is_value(r4["data"]):
            print("最热资讯"+is_value(r4["data"]))
            htm02 += f'<tr style="color:red"><td>{number}、最热资讯,数据是否有value</td><td>{is_value(r4["data"])}</td></tr>'
            number += 1
        else:
            print("最热资讯,都有value")
            htm02 += f'<tr ><td>{number}、最热资讯,数据是否有value</td><td>都有value</td></tr>'
            number += 1
    else:
        print("最热资讯,未返回数据")
        htm02 += f'<tr style="color:red"><td>{number}、最热资讯</td><td>未返回数据</td></tr>'
        number += 1
    print("ls11:", ls11)

    htm01 = '<table border="1px solid" cellspacing="0" cellpadding="0"><thead><tr><th>验证信息</th><th>验证结果</th></tr></thead>'
    # re_result = re.findall('(.*?)style="color:(.*?)">', htm02)
    # red = len(re_result)
    red = htm02.count('red')
    p = f'<p>共计{number-1}个接口，失败的：<span style="color: red">{red}</span>个</p>'
    htm = p+htm01 + htm02 + "</table>"
    return [htm,h5_date]



# print(h5_daily_monitor())
# html3 = h5_daily_monitor()
# send_email("【%s，h5日报接口】"%html3[1], html3[0])